package com.hanhanxiaochong.zhongxiangchuanmei.config;

import com.hanhanxiaochong.zhongxiangchuanmei.bean.AddressItemBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.BankCardBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.BannerBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ChooseCityModel;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.CollectItemBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.CouponBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.CustomerDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.CustomerItem;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.DealDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ExpressBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.GoodDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.HomeDeliverBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.HotProjectBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.InfoListBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.InviteBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.InviteSecondBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.LSMXBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.LoginInfoBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.MemberShipBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.NearByShopBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.NewAddressBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.OrderBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.OrderGoodDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.OrderNumberBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.OrderProjectDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.PayDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.PayDetailShoppingBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.PersonalWalletBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.PriceBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ProductEvaluationBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ProjectDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ProjectEvaluationBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ProjectEvaluationListBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ProvinceBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.RechargeBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShopDetailBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShopDetailProductBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShopDetailProjectBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShopListBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShopTypeBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShoppingCartBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.ShoppingCartItemBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.SimpleUserInfo;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.StaffWalletItem;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.StorRewardBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.SymptomBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.SystemGiveBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.SystemNoticeBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.TechnicianBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.TechnicianOrderItem;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.UserRewardBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.VipGradeItem;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.VipProjectBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.WXPayBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.WalletMoneyBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.WithdrawInfoBean;
import com.hanhanxiaochong.zhongxiangchuanmei.bean.WorkAttendanceBean;
import com.wzgiceman.rxretrofitlibrary.retrofit_rx.Api.ResponseBase;

import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import rx.Observable;

/**
 * service-接口
 */

public interface HttpPostService {

    /**
     * 轮播图
     *
     * @param type 位置：打开项目时：1；首页轮播：2；商城轮播:3
     */
    @FormUrlEncoded
    @POST("index/slide")
    Observable<ResponseBase<List<BannerBean>>> getBanner(@Field("type") String type);

    /**
     * 系统公告
     */
    @POST("index/news")
    Observable<ResponseBase<List<SystemNoticeBean>>> getSystemNews();

    /**
     * 热门推荐
     */
    @POST("index/membership")
    Observable<ResponseBase<MemberShipBean>> membership();

    /**
     * 注册
     *
     * @param mobile    手机号
     * @param code      密码
     * @param user_pass 验证码
     * @param user_code 邀请码
     */
    @FormUrlEncoded
    @POST("login/regist")
    Observable<ResponseBase<String>> regist(@Field("mobile") String mobile,
                                            @Field("code") String code,
                                            @Field("user_pass") String user_pass,
                                            @Field("user_code") String user_code);

    /**
     * 普通登录
     *
     * @param mobile    手机号
     * @param user_pass 密码
     * @param code      验证码
     */
    @FormUrlEncoded
    @POST("login/logindoit")
    Observable<ResponseBase<LoginInfoBean>> logindoit(@Field("mobile") String mobile,
                                                      @Field("user_pass") String user_pass,
                                                      @Field("code") String code);

    /**
     * 自动登录
     *
     * @param token token验证
     */
    @FormUrlEncoded
    @POST("login/auto_login")
    Observable<ResponseBase<LoginInfoBean>> auto_login(@Field("token") String token);

    /**
     * 容联短信
     *
     * @param to   手机号码
     * @param type 1是注册,换绑新手机号,三方注册绑定手机2是找回密码3是其他(银行卡绑定,手机换绑旧手机号)、默认1
     */
    @FormUrlEncoded
    @POST("SMS/sendTemplateSMS")
    Observable<ResponseBase<String>> sendTemplateSMS(@Field("to") String to,
                                                     @Field("type") String type);

    /**
     * 商城分类
     *
     * @param id    上级id打开二级/三级分类时用到
     * @param level 1：一级分类，2：二级分类；3：三级分类
     */
    @FormUrlEncoded
    @POST("shop/shop_type")
    Observable<ResponseBase<ShopTypeBean>> getShopType(@Field("id") String id,
                                                       @Field("level") String level);

    /**
     * 商城列表
     */
    @FormUrlEncoded
    @POST("shop/shop_list")
    Observable<ResponseBase<List<ShopListBean>>> shop_list(@FieldMap Map<String, String> map);

    /**
     * 商品详情
     *
     * @param id 商品id
     */
    @FormUrlEncoded
    @POST("shop/goods_detail")
    Observable<ResponseBase<GoodDetailBean>> goods_detail(@Field("id") String id);


    /**
     * 门店详情
     *
     * @param token token
     * @param id    门店id
     */
    @FormUrlEncoded
    @POST("store/store_detail")
    Observable<ResponseBase<ShopDetailBean>> store_detail(@Field("token") String token,
                                                          @Field("id") String id);

    /**
     * 店铺项目分类
     *
     * @param id   一级分类id
     * @param type 1:项目分类；2：产品分类；
     */
    @FormUrlEncoded
    @POST("store/type_list")
    Observable<ResponseBase<List<ShopTypeBean.TypeBean>>> type_list(@Field("id") String id,
                                                                    @Field("type") String type);

    /**
     * 门店项目列表
     *
     * @param pid    门店id
     * @param typeid 二级分类id
     * @param page   页码
     * @param size   单页数据条数
     */
    @FormUrlEncoded
    @POST("store/project_list")
    Observable<ResponseBase<ShopDetailProjectBean>> project_list(@Field("pid") String pid,
                                                                 @Field("typeid") String typeid,
                                                                 @Field("page") int page,
                                                                 @Field("size") int size);

    /**
     * 门店产品列表
     *
     * @param sort_id 店铺id
     * @param t_id    分类id
     * @param page    页码
     * @param size    单页数据条数
     */
    @FormUrlEncoded
    @POST("shop/getProduct")
    Observable<ResponseBase<List<ShopDetailProductBean>>> getProduct(@Field("sort_id") String sort_id,
                                                                     @Field("t_id") String t_id,
                                                                     @Field("page") int page,
                                                                     @Field("size") int size);

    /**
     * 适应症状
     */
    @POST("shop/symptom")
    Observable<ResponseBase<List<SymptomBean>>> symptom();

    /**
     * 收藏
     *
     * @param token    token
     * @param store_id 门店id/项目id
     * @param type     1:门店;2项目
     */
    @FormUrlEncoded
    @POST("publics/favor")
    Observable<ResponseBase<String>> favor(@Field("token") String token,
                                           @Field("store_id") String store_id,
                                           @Field("type") String type);

    /**
     * 取消收藏
     *
     * @param token    token
     * @param store_id 门店id/项目id
     * @param type     1:门店;2项目
     */
    @FormUrlEncoded
    @POST("publics/cancel ")
    Observable<ResponseBase<String>> cancel(@Field("token") String token,
                                            @Field("store_id") String store_id,
                                            @Field("type") String type);

    /**
     * 上传头像
     */
    @POST("publics/uploadAvatar")
    @Multipart
    Observable<ResponseBase<String>> uploadAvatar(@Part List<MultipartBody.Part> parts);

    /**
     * 上传多张图片
     */
    @POST("publics/uploadAvatars")
    @Multipart
    Observable<ResponseBase<List<String>>> upload_multi(@Part List<MultipartBody.Part> parts);

    /**
     * 个人详细信息
     */
    @FormUrlEncoded
    @POST("users/user_list")
    Observable<ResponseBase<LoginInfoBean>> user_list(@Field("token") String token);

    /**
     * 更新个人资料
     */
    @FormUrlEncoded
    @POST("users/upd_date")
    Observable<ResponseBase<String>> upd_date(@FieldMap Map<String, String> map);

    /**
     * 项目列表页
     *
     * @param page 页数默认1
     * @param size 条数默认20
     */
    @FormUrlEncoded
    @POST("projust/lists")
    Observable<ResponseBase<List<HotProjectBean>>> lists(@Field("page") int page,
                                                         @Field("size") int size);

    /**
     * 项目详情
     *
     * @param id 项目id
     */
    @FormUrlEncoded
    @POST("projust/project_detail")
    Observable<ResponseBase<ProjectDetailBean>> project_detail(@Field("id") String id);

    /**
     * 门店选择
     *
     * @param id     项目/产品id
     * @param cityid 城市id
     * @param type   1:项目;2:产品
     * @param lat    东经
     * @param lng    北纬
     * @param page   页数
     * @param size   条数
     */
    @FormUrlEncoded
    @POST("purchase/choice")
    Observable<ResponseBase<List<NearByShopBean>>> choice(@Field("id") String id,
                                                          @Field("cityid") String cityid,
                                                          @Field("type") String type,
                                                          @Field("lat") double lat,
                                                          @Field("lng") double lng,
                                                          @Field("page") int page,
                                                          @Field("size") int size);

    /**
     * 选择技师
     *
     * @param s_id 门店id
     * @param p_id 项目id
     */
    @FormUrlEncoded
    @POST("purchase/tech")
    Observable<ResponseBase<List<TechnicianBean>>> tech(@Field("s_id") String s_id,
                                                        @Field("p_id") String p_id);

    /**
     * 加入购物车
     *
     * @param token token
     * @param id    商品id
     * @param num   加入的商品数量
     * @param store 门店id(如果没有为null)
     */
    @FormUrlEncoded
    @POST("shop/shop_cart")
    Observable<ResponseBase<List<ShoppingCartBean>>> shop_cart(@Field("token") String token,
                                                               @Field("id") String id,
                                                               @Field("num") String num,
                                                               @Field("store") String store);

    /**
     * 购物车列表
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("shop/shopping_list")
    Observable<ResponseBase<List<ShoppingCartItemBean>>> shopping_list(@Field("token") String token);

    /**
     * 附近门店
     */
    @FormUrlEncoded
    @POST("store/lists")
    Observable<ResponseBase<List<NearByShopBean>>> nearbyShop(@FieldMap Map<String, String> map);

    /**
     * 产品列表(待支付界面,从商品详情跳转)
     *
     * @param token token
     * @param p_id  商城传过来的产品id
     * @param r_id  店铺传过来的传门店id否则传null
     */
    @FormUrlEncoded
    @POST("purchase/pro_list")
    Observable<ResponseBase<PayDetailBean>> pay_product_list(@Field("token") String token,
                                                             @Field("p_id") String p_id,
                                                             @Field("r_id") String r_id);

    /**
     * 产品列表(待支付界面,从购物车跳转)
     *
     * @param token token
     * @param o_id  购物车传过来的购物车id,多个用","隔开
     * @param o_num 购物车传过来的购买数量,多个用","隔开,与产品id对应最低1
     */
    @FormUrlEncoded
    @POST("purchase/pro_list")
    Observable<ResponseBase<List<PayDetailShoppingBean>>> pay_shopping_list(@Field("token") String token,
                                                                            @Field("o_id") String o_id,
                                                                            @Field("o_num") String o_num);

    /**
     * 地址列表
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("users/address")
    Observable<ResponseBase<List<AddressItemBean>>> address(@Field("token") String token);

    /**
     * 添加地址
     */
    @FormUrlEncoded
    @POST("users/in_address")
    Observable<ResponseBase<NewAddressBean>> in_address(@FieldMap Map<String, String> map);

    /**
     * 修改地址
     */
    @FormUrlEncoded
    @POST("users/up_ress")
    Observable<ResponseBase<NewAddressBean>> up_ress(@FieldMap Map<String, String> map);

    /**
     * 收货地址删除
     *
     * @param token token
     * @param id    地址id
     */
    @FormUrlEncoded
    @POST("users/de_ress")
    Observable<ResponseBase<String>> de_ress(@Field("token") String token,
                                             @Field("id") String id);

    /**
     * 修改默认地址
     *
     * @param token    token
     * @param id       地址id
     * @param defaults 是否为默认 1:默认;0:取消默认
     */
    @FormUrlEncoded
    @POST("users/defaults")
    Observable<ResponseBase<String>> defaults(@Field("token") String token,
                                              @Field("id") String id,
                                              @Field("defaults") String defaults);

    /**
     * 上门取货
     *
     * @param city 城市id
     * @param lat  纬度
     * @param lng  经度
     */
    @FormUrlEncoded
    @POST("purchase/door")
    Observable<ResponseBase<HomeDeliverBean>> door(@Field("city") String city,
                                                   @Field("lat") double lat,
                                                   @Field("lng") double lng);

    /**
     * 产品购买
     */
    @FormUrlEncoded
    @POST("purchase/produst")
    Observable<ResponseBase<OrderNumberBean>> produst(@FieldMap Map<String, String> map);

    /**
     * 产品价格
     *
     * @param token token
     * @param p_id  产品id如果如果多个项目同时下单id用,隔开
     * @param p_num 产品购买数量如果如果多个项目同时下单数量用,隔开
     * @param y_id  代金券id
     */
    @FormUrlEncoded
    @POST("purchase/pd_price")
    Observable<ResponseBase<PriceBean>> pd_price(@Field("token") String token,
                                                 @Field("p_id") String p_id,
                                                 @Field("p_num") String p_num,
                                                 @Field("y_id") String y_id);

    /**
     * 项目价格
     *
     * @param token token
     * @param p_id  项目id
     * @param y_id  优惠券id
     */
    @FormUrlEncoded
    @POST("purchase/price")
    Observable<ResponseBase<PriceBean>> price(@Field("token") String token,
                                              @Field("p_id") String p_id,
                                              @Field("y_id") String y_id);

    /**
     * 项目预约
     */
    @FormUrlEncoded
    @POST("purchase/make_an")
    Observable<ResponseBase<OrderNumberBean>> make_an(@FieldMap Map<String, String> map);

    /**
     * 产品优惠券列表
     *
     * @param token token
     * @param p_id  产品id 多个产品用","隔开
     */
    @FormUrlEncoded
    @POST("purchase/ppjcount")
    Observable<ResponseBase<List<CouponBean>>> ppjcount(@Field("token") String token,
                                                        @Field("p_id") String p_id);

    /**
     * 项目优惠券列表
     *
     * @param token token
     * @param p_id  项目id
     */
    @FormUrlEncoded
    @POST("purchase/discount")
    Observable<ResponseBase<List<CouponBean>>> discount(@Field("token") String token,
                                                        @Field("p_id") String p_id);

    /**
     * 支付宝支付
     *
     * @param order_on 订单号
     * @param money    金额
     */
    @FormUrlEncoded
    @POST("aplipay/file_import1")
    Observable<ResponseBase<String>> alipaynotify_url(@Field("order_on") String order_on,
                                                      @Field("money") String money);

    /**
     * 三方登录
     *
     * @param openid openid
     * @param data   回调数据
     * @param type   登陆方式、0新浪、1微信、2QQ
     */
    @FormUrlEncoded
    @POST("login/san_login")
    Observable<ResponseBase<LoginInfoBean>> san_login(@Field("openid") String openid,
                                                      @Field("data") String data,
                                                      @Field("type") String type);

    /**
     * 订单
     *
     * @param token 用户token
     * @param type  1:全部;2:代付款;3:待评价;4:待服务;5:代收货
     * @param page  页数
     * @param size  数据条数
     */
    @FormUrlEncoded
    @POST("order/whole")
    Observable<ResponseBase<List<OrderBean>>> whole(@Field("token") String token,
                                                    @Field("type") int type,
                                                    @Field("page") int page,
                                                    @Field("size") int size);

    @FormUrlEncoded
    @POST("Byitsdict.action")
    Observable<String> screen(@Field("json") String json);

    @FormUrlEncoded
    @POST("{action}")
    Observable<String> postConection(@Path("action") String actoin, @Field("json") String json);

    @Multipart
    @POST("modifyPoliceInfoImg.action")
    Observable<String> image(@Part MultipartBody.Part json, @Part MultipartBody.Part file);


    @Multipart
//    @FormUrlEncoded
    @POST("uploadImage.action")
    Observable<String> image(@Part("token") String token, @Part MultipartBody.Part files);


    /**
     * 消息列表
     *
     * @param token token
     * @param size  页码
     * @param page  每页条数
     * @param type  普通广告：1 系统消息：2
     */

    @FormUrlEncoded
    @POST("index/new_list")
    Observable<ResponseBase<List<InfoListBean>>> info_list(@Field("token") String token,
                                                           @Field("size") int size,
                                                           @Field("page") int page,
                                                           @Field("type") String type);

    /**
     * 个人钱包
     *
     * @param u_id      用户ID
     * @param u_balance 用户余额
     */
    @FormUrlEncoded
    @POST("users/wallet")
    Observable<ResponseBase<PersonalWalletBean>> personal_Content(@Field("u_id") String u_id,
                                                                  @Field("u_balance") String u_balance);

    /**
     * 意见与反馈
     *
     * @param content 反馈内容
     */
    @FormUrlEncoded
    @POST("users/feedback")
    Observable<ResponseBase<String>> feedback(@Field("token") String token,
                                              @Field("content") String content);

    /**
     * 城市列表
     */
    @POST("index/citys")
    Observable<ResponseBase<ChooseCityModel>> citys();

    /**
     * 订单项目详情
     *
     * @param token     token
     * @param id        订单id
     * @param order_num 订单号
     */
    @FormUrlEncoded
    @POST("order/order_proj")
    Observable<ResponseBase<OrderProjectDetailBean>> order_proj(@Field("token") String token,
                                                                @Field("id") String id,
                                                                @Field("order_num") String order_num);

    /**
     * 产品订单详情
     *
     * @param token     token
     * @param id        订单id
     * @param order_num 订单号
     */
    @FormUrlEncoded
    @POST("order/order_prod")
    Observable<ResponseBase<OrderGoodDetailBean>> order_prod(@Field("token") String token,
                                                             @Field("id") String id,
                                                             @Field("order_num") String order_num);

    /**
     * 取消订单
     *
     * @param token token
     * @param id    订单id
     * @param o_num 订单号
     */
    @FormUrlEncoded
    @POST("order/is_del_order ")
    Observable<ResponseBase<String>> del_order(@Field("token") String token,
                                               @Field("id") String id,
                                               @Field("o_num") String o_num);

    /**
     * 修改订单状态为已收货
     *
     * @param token token
     * @param id    订单id
     */
    @FormUrlEncoded
    @POST("order/status")
    Observable<ResponseBase<String>> status(@Field("token") String token,
                                            @Field("id") String id);

    /**
     * 我的收藏
     *
     * @param token token
     * @param type  分类 1:项目;2:门店
     * @param lat   维度
     * @param lng   经度
     * @param page  页数默认1
     * @param size  条数默认20
     */
    @FormUrlEncoded
    @POST("users/store_favorite")
    Observable<ResponseBase<List<CollectItemBean>>> store_favorite(@Field("token") String token,
                                                                   @Field("type") String type,
                                                                   @Field("lat") double lat,
                                                                   @Field("lng") double lng,
                                                                   @Field("page") int page,
                                                                   @Field("size") int size);

    /**
     * 修改绑定手机号
     *
     * @param token  token
     * @param mobile 手机号
     * @param code   验证码
     */
    @FormUrlEncoded
    @POST("users/upd_mobile")
    Observable<ResponseBase<String>> upd_mobile(@Field("token") String token,
                                                @Field("mobile") String mobile,
                                                @Field("code") String code);

    /**
     * 微信支付
     *
     * @param money    金额
     * @param order_no 订单号
     * @param type     (1)购买会员卡(2)预约服务(3)购买视频教程
     */
    @FormUrlEncoded
    @POST("WxPay/WxPays")
    Observable<ResponseBase<WXPayBean>> WxPay(@Field("money") String money,
                                              @Field("order_no") String order_no,
                                              @Field("type") String type);

    /**
     * 实名认证
     *
     * @param token  token
     * @param name   姓名
     * @param num    身份证号
     * @param file_z 正面照
     * @param file_f 背面照
     */
    @FormUrlEncoded
    @POST("users/auth")
    Observable<ResponseBase<String>> auth(@Field("token") String token,
                                          @Field("name") String name,
                                          @Field("num") String num,
                                          @Field("file_z") String file_z,
                                          @Field("file_f") String file_f);

    /**
     * 修改登录密码
     *
     * @param token     token
     * @param mobile    手机号
     * @param code      验证码
     * @param user_pass 新密码
     */
    @FormUrlEncoded
    @POST("users/up_pass")
    Observable<ResponseBase<String>> up_pass(@Field("token") String token,
                                             @Field("mobile") String mobile,
                                             @Field("code") String code,
                                             @Field("user_pass") String user_pass);

    /**
     * 我的礼包-系统赠送
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("index/disc")
    Observable<ResponseBase<SystemGiveBean>> disc(@Field("token") String token);

    /**
     * 我的礼包-会员专享
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("users/user_vip")
    Observable<ResponseBase<VipProjectBean>> user_vip(@Field("token") String token);

    /**
     * 搜索-门店
     *
     * @param token token
     * @param type  门店：1（默认）；商品：2；项目：3
     * @param lat   维度
     * @param lng   经度
     */
    @FormUrlEncoded
    @POST("index/searchs")
    Observable<ResponseBase<List<NearByShopBean>>> search_shop(@Field("token") String token,
                                                               @Field("type") String type,
                                                               @Field("lat") double lat,
                                                               @Field("lng") double lng);

    /**
     * 搜索-产品
     *
     * @param token token
     * @param type  门店：1（默认）；商品：2；项目：3
     */
    @FormUrlEncoded
    @POST("index/searchs")
    Observable<ResponseBase<List<ShopListBean>>> search_product(@Field("token") String token,
                                                                @Field("type") String type);

    /**
     * 搜索-项目
     *
     * @param token token
     * @param type  门店：1（默认）；商品：2；项目：3
     */
    @FormUrlEncoded
    @POST("index/searchs")
    Observable<ResponseBase<List<HotProjectBean>>> search_project(@Field("token") String token,
                                                                  @Field("type") String type);

    /**
     * 技师订单
     *
     * @param token token
     * @param time  筛选时间 时间格式2018-05-10
     * @param page  页数
     * @param size  条数
     */
    @FormUrlEncoded
    @POST("users/tech_order")
    Observable<ResponseBase<List<TechnicianOrderItem>>> tech_order(@Field("token") String token,
                                                                   @Field("time") String time,
                                                                   @Field("page") int page,
                                                                   @Field("size") int size);

    /**
     * 顾客管理
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("users/tech_user")
    Observable<ResponseBase<List<CustomerItem>>> tech_user(@Field("token") String token);

    /**
     * 顾客详情
     *
     * @param token         token
     * @param u_id          顾客id
     * @param user_nicename 顾客用户名
     * @param mobile        顾客手机号
     */
    @FormUrlEncoded
    @POST("users/tech_user_list")
    Observable<ResponseBase<CustomerDetailBean>> tech_user_list(@Field("token") String token,
                                                                @Field("u_id") String u_id,
                                                                @Field("user_nicename") String user_nicename,
                                                                @Field("mobile") String mobile);

    /**
     * 员工钱包
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("users/tec_monye")
    Observable<ResponseBase<List<StaffWalletItem>>> tec_monye(@Field("token") String token);

    /**
     * 打卡记录
     *
     * @param token token
     */
    @FormUrlEncoded
    @POST("users/clock_list")
    Observable<ResponseBase<WorkAttendanceBean>> clock_list(@Field("token") String token);

    /**
     * 打卡
     *
     * @param token token
     * @param type  1:上班;2:下班;
     */
    @FormUrlEncoded
    @POST("users/clock")
    Observable<ResponseBase<String>> clock(@Field("token") String token,
                                           @Field("type") String type);

    /**
     * 流水明细
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/water_account")
    Observable<ResponseBase<List<LSMXBean>>> getlsmx(@Field("token") String token);

    /**
     * 个人钱包
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/wallet")
    Observable<ResponseBase<WalletMoneyBean>> getWalletMoney(@Field("token") String token);

    /**
     * 推荐用户奖励
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/user_reward")
    Observable<ResponseBase<List<UserRewardBean>>> getUserReward(@Field("token") String token);

    /**
     * 推荐用户奖励详情
     *
     * @param token
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("users/user_reward_details")
    Observable<ResponseBase<DealDetailBean>> getUserRewardDetail(@Field("token") String token, @Field("id") String id);

    /**
     * 推荐门店奖励
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/stor_reward")
    Observable<ResponseBase<List<StorRewardBean>>> getStorReward(@Field("token") String token);

    /**
     * 推荐门店奖励详情
     *
     * @param token
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("users/stor_reward_details")
    Observable<ResponseBase<DealDetailBean>> getStorRewardDetail(@Field("token") String token, @Field("id") String id);

    /**
     * 开户省/市
     *
     * @param p_id 如果获取省则不传
     * @return
     */
    @FormUrlEncoded
    @POST("users/p_city")
    Observable<ResponseBase<List<ProvinceBean>>> getProvinceOrCity(@Field("p_id") String p_id);

    /**
     * 获取银行列表
     *
     * @return
     */
    @POST("users/bank")
    Observable<ResponseBase<List<String>>> getBank();

    /**
     * 添加银行卡
     *
     * @param ca_name       姓名
     * @param ca_phone      手机号
     * @param ca_number     银行卡号
     * @param city1         开户省id
     * @param city2         开户市id
     * @param token
     * @param code          验证码
     * @param ca_ress       开户网点
     * @param ca_wxbanklist 银行名
     * @return
     */
    @FormUrlEncoded
    @POST("users/addCard")
    Observable<ResponseBase<String>> AddCard(@Field("ca_name") String ca_name,
                                             @Field("ca_phone") String ca_phone,
                                             @Field("ca_number") String ca_number,
                                             @Field("city1") String city1,
                                             @Field("city2") String city2,
                                             @Field("token") String token,
                                             @Field("code") String code,
                                             @Field("ca_ress") String ca_ress,
                                             @Field("ca_wxbanklist") String ca_wxbanklist);

    /**
     * 银行卡列表
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/cardList")
    Observable<ResponseBase<List<BankCardBean>>> getBankCards(@Field("token") String token);

    /**
     * 提现信息
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/forward")
    Observable<ResponseBase<WithdrawInfoBean>> getWithdrawInfo(@Field("token") String token);

    /**
     * 提现
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST("users/o_forward")
    Observable<ResponseBase<String>> withdraw(@Field("token") String token, @Field("money") String money, @Field("card_id") String card_id);

    /**
     * 充值
     *
     * @param token
     * @param money
     * @return
     */
    @FormUrlEncoded
    @POST("users/recharge")
    Observable<ResponseBase<RechargeBean>> recharge(@Field("token") String token,
                                                    @Field("money") String money);

    /**
     * 系统消息详情
     *
     * @param token token
     * @param id    消息id
     */
    @FormUrlEncoded
    @POST("index/news_con")
    Observable<ResponseBase<String>> news_con(@Field("token") String token,
                                              @Field("id") String id);


    @FormUrlEncoded
    @POST("users/person_easy_info")
    Observable<ResponseBase<SimpleUserInfo>> person_easy_info(@Field("token") String token);

    /**
     * 查看快递
     *
     * @param id 订单id
     */
    @FormUrlEncoded
    @POST("order/kuai")
    Observable<ResponseBase<ExpressBean>> kuai(@Field("id") String id);

    /**
     * 待评价产品详情页
     *
     * @param token token
     * @param o_id  订单id
     */
    @FormUrlEncoded
    @POST("order/be_prod_evaluated")
    Observable<ResponseBase<ProductEvaluationBean>> be_prod_evaluated(@Field("token") String token,
                                                                      @Field("o_id") String o_id);

    /**
     * 待评价项目详情页
     *
     * @param token token
     * @param o_id  订单id
     */
    @FormUrlEncoded
    @POST("order/be_proj_evaluated")
    Observable<ResponseBase<ProjectEvaluationBean>> be_proj_evaluated(@Field("token") String token,
                                                                      @Field("o_id") String o_id);

    /**
     * 项目评价
     *
     * @param order_num 订单号
     * @param p_id      项目id
     * @param o_id      订单id
     * @param p_num     项目分
     * @param o_num     门店分
     * @param f_num     服务分
     * @param content   评价内容
     * @param pic       图片多图用,隔开
     */
    @FormUrlEncoded
    @POST("publics/proj_comment")
    Observable<ResponseBase<String>> proj_comment(@Field("token") String token,
                                                  @Field("order_num") String order_num,
                                                  @Field("p_id") String p_id,
                                                  @Field("o_id") String o_id,
                                                  @Field("p_num") String p_num,
                                                  @Field("o_num") String o_num,
                                                  @Field("f_num") String f_num,
                                                  @Field("content") String content,
                                                  @Field("pic") String pic);

    /**
     * 产品评价(多个产品,分割)
     *
     * @param order_num 订单号
     * @param p_id      项目id
     * @param o_id      订单id
     * @param p_num     项目分
     * @param o_num     门店分
     * @param f_num     服务分
     * @param content   评价内容
     * @param pic       图片多图用,隔开
     */
    @FormUrlEncoded
    @POST("publics/prod_comment")
    Observable<ResponseBase<String>> prod_comment(@Field("token") String token,
                                                  @Field("order_num") String order_num,
                                                  @Field("p_id") String p_id,
                                                  @Field("o_id") String o_id,
                                                  @Field("p_num") String p_num,
                                                  @Field("o_num") String o_num,
                                                  @Field("f_num") String f_num,
                                                  @Field("content") String content,
                                                  @Field("pic") String pic);

    /**
     * 首页-会员专享
     */
    @POST("index/grade")
    Observable<ResponseBase<List<VipGradeItem>>> grade();

    /**
     * 我的邀请一级页面
     */
    @POST("users/invitation")
    @FormUrlEncoded
    Observable<ResponseBase<InviteBean>> invitation(@Field("token") String token);

    /**
     * 我的邀请二级页面
     */
    @POST("users/invitation_two")
    @FormUrlEncoded
    Observable<ResponseBase<InviteSecondBean>> invitation_two(@Field("u_id") String u_id);

    /**
     * 项目评价列表
     *
     * @param p_id 项目id
     */
    @POST("projust/proj_comment")
    @FormUrlEncoded
    Observable<ResponseBase<ProjectEvaluationListBean>> proj_comment(@Field("p_id") String p_id);

    /**
     * 产品评价列表
     *
     * @param p_id 产品id
     */
    @POST("shop/prod_comment")
    @FormUrlEncoded
    Observable<ResponseBase<ProjectEvaluationListBean>> prod_comment(@Field("p_id") String p_id);

    /**
     * 是否已领取首页答题问卷代金卷
     */
    @POST("users/is_discount")
    @FormUrlEncoded
    Observable<ResponseBase<Map<String, Integer>>> is_discount(@Field("token") String token);

}